#pragma once

#include "GalconCommonTypes.h"

static QColor GameColor[] = {
   QColor(255, 0, 0),
   QColor(0, 255, 0),
   QColor(255, 255, 0),
   QColor(0, 0, 255),
   QColor(0, 0, 0),
   QColor(255, 255, 255),
   QColor(128, 128, 128)
};



enum PlayerType {
   person,
   ai
};


class GameButton;
typedef boost::shared_ptr<GameButton> GameButtonPtr;

class Ships;
typedef boost::shared_ptr<Ships> ShipsPtr;

class Ship;
typedef boost::shared_ptr<Ship> ShipPtr;

class Planet;
typedef boost::shared_ptr<Planet> PlanetPtr;


typedef std::pair<PlanetID, PlanetPtr > PlanetsPair;
typedef std::map<PlanetID, PlanetPtr > PlanetsMap;
typedef std::vector<PlanetPtr> PlanetsVector; 
typedef boost::shared_ptr<PlanetsMap> PlanetsMapPtr;
typedef const boost::shared_ptr<PlanetsMap> PlanetsMapPtrConst;

class Player;
typedef boost::shared_ptr<Player> PlayerPtr;

typedef std::pair<PlayerID, PlayerPtr > PlayerPair;
typedef std::map<PlayerID, PlayerPtr > PlayersMap;
typedef boost::shared_ptr<PlayersMap> PlayersMapPtr;
typedef const boost::shared_ptr<PlayersMap> PlayerMapPtrConst;

typedef std::pair<PlayerID,PlanetID> PlayerPlanetPair;

typedef std::vector<GameColors> GameColorsVector;
typedef std::vector<PlayerType> PlayerTypesVector;
typedef std::vector<PlayerPlanetPair> PlayersToPlanetsVector;

class PlanetInternalImpl;
typedef boost::shared_ptr<PlanetInternalImpl> PlanetInternalImplPtr;

class PlayerInternalImpl;
typedef boost::shared_ptr<PlayerInternalImpl> PlayerInternalImplPtr;

typedef std::vector<PlanetInternalImplPtr> PlanetsInitInfoVector;
typedef std::vector<PlayerInternalImplPtr> PlayersInitInfoVector;